package it.nola.soccer.adapter;

import it.nola.soccer.Const;
import it.nola.soccer.GoalEdit;
import it.nola.soccer.R;
import android.content.Context;
import android.content.res.Resources;
import android.database.Cursor;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

/**
 * Un Adapter che consente di rimappare opportunamente i valori provenienti dal db
 * 
 * @author pcasillo
 */
public class GoalAdapter extends AbstractCursorAdapter {

    public GoalAdapter(GoalEdit context, int layout, Cursor c, String[] from, int[] to) {
	super(context, layout, c, from, to);
    }

    /**
     * Rispetto al comportamento classico del SimpleCursorAdpater qui viene analizzata ogni colonna
     * e riscritto il valore e/o la mappatura
     */
    @Override
    public void bindView(View view, Context context, Cursor cursor) {
	final int count=myTo.length;
	final int[] from=findColumns(myFrom);
	final int[] to=myTo;
	Resources r=context.getResources();
	String text;
	// il for cicla sul numero di campi da riempire nella view: tali campi possono differire in
	// numero dalle colonne del cursore
	for (int i=0; i<count; i++) {
	    final View v=view.findViewById(to[i]);
	    if (v!=null) {
		if (Const.Goals.KEY_TEAM.equals(myFrom[i])) {
		    // il nome della squadra la recupero dall'activity sulla base di quanto
		    // recuperato con il cursore (0 => squadra di casa, 1 => squadra in trasferta)
		    text=Const.HOME_TEAM==cursor.getInt(from[i]) ? activity.getTeam1Name().toString() : activity
			.getTeam2Name().toString();
		}
		else if (Const.Goals.KEY_NAME_PLAYER.equals(myFrom[i])) {
		    // non mi limito a scrivere semplicemente il nome del giocatore, ma metto anche
		    // una stringa ad indicare l'evenutale rigore o autogol
		    text=cursor.getString(from[i]);
		    if (cursor.getInt(cursor.getColumnIndex(Const.Goals.KEY_IS_AUTO))==1) {
			text+=" "+r.getString(R.string.short_own_goal);
		    }
		    if (cursor.getInt(cursor.getColumnIndex(Const.Goals.KEY_IS_PENALTY))==1) {
			text+=" "+r.getString(R.string.short_penalty);
		    }
		}
		else if (Const.Goals.KEY_HALF.equals(myFrom[i])) {
		    // prendo i nomi brevi dei tempi
		    text=r.getTextArray(R.array.short_halfs)[cursor.getInt(from[i])].toString();
		}
		else {
		    // i minuti li posso inserire senza problemi
		    text=cursor.getString(from[i]);
		}
		if (v instanceof TextView) {
		    setViewText((TextView) v, text);
		}
		else if (v instanceof ImageView) {
		    setViewImage((ImageView) v, text);
		}
		else {
		    throw new IllegalStateException(v.getClass().getName()+" is not a "
			+" view that can be bounds by this SimpleCursorAdapter");
		}
	    }
	}
    }

}